<?php

/**
 * Representa uma Mensagem de um Chamado no sistema
 */
class Mensagem implements IObject {

    private $IDMensagem;
    private $IDChamado;
    private $IDUsuario;
    private $IDCliente;
    private $AcaoChamado;
    private $TxMensagem;
    private $EnStatus;
    private $DtResposta;

    private $Usuario;
    private $Chamado;
    private $Cliente;

    public function __construct($TxMensagem) {
        $this->TxMensagem = $TxMensagem;
    }

    public function loadDefaultPhoneCalledData() {
        $this->AcaoChamado = new AcaoChamado(AcaoChamado::TELEFONICO, 'Telefonico');
        $this->EnStatus = 'LIBERADO';
        $this->DtResposta = now();
    }

    public function loadDefaultInternalCalledData() {
        $this->AcaoChamado = new AcaoChamado(AcaoChamado::RESPOSTA, 'Resposta');
        $this->EnStatus = 'LIBERADO';
        $this->DtResposta = now();
    }

    public function loadMessageCalled($ArDados) {
        $this->IDMensagem = $ArDados['IDHistoricoChamado'];
        $this->IDChamado = $ArDados['IDChamado'];
        $this->IDUsuario = $ArDados['IDUsuario'];
        $this->IDCliente = $ArDados['IDCliente'];
        $this->AcaoChamado = new AcaoChamado($ArDados['IDAcaoChamado'], $ArDados['StAcao']);
        $this->EnStatus = $ArDados['EnStatus'];
        $this->DtResposta = $ArDados['DtResposta'];
    }

    public function generateMessage($ArAuxDatas) {
        $Usuario = Dracosys::getLoggedUser();
        $this->DtResposta = now();
        $this->IDChamado = $ArAuxDatas['IDChamado'];
        $this->IDUsuario = $Usuario->getIDUsuario();
        $this->EnStatus = 'LIBERADO';
        if( !$Usuario->can('Respostas Liberadas') && $this->isAnswer() ) {
            $this->EnStatus = 'AGUARDANDO LIBERACAO';
        }
    }

    public function loadCalled() {
        $tMysqli = MyDb::getInstance();
        $tMysqli->getConnection(MYSQL_HOST, MYSQL_USER,MYSQL_PASS, MYSQL_DB);
        $StSql = TQuery::getSqlFindCalledById($this->IDChamado);
        $tQuery = $tMysqli->exec($StSql);
        while ($ArDadosChamado = mysqli_fetch_assoc($tQuery)) {
            $this->Chamado = Chamado::calledFactory($ArDadosChamado, $this->tMysqli);
        }
        $tMysqli->close();
    }

    public function isUserMessage() {
        return isset($this->IDUsuario);
    }

    public function isCustomerMessage() {
        return isset($this->IDCliente);
    }

    public function isType($EnTipo) {
        return $EnTipo == $this->AcaoChamado->getIDAcaoChamado();
    }

    public function isWaitingLiberation() {
        return $this->EnStatus == 'AGUARDANDO LIBERACAO';
    }

    public function isAnswer() {
        return $this->AcaoChamado->getIDAcaoChamado() == AcaoChamado::RESPOSTA;
    }

    public function getAuthor() {
        if( $this->isAnswer() || $this->isType(AcaoChamado::OBSERVACAO) ) {
            if( $this->isUserMessage() ) {
                return $this->Usuario->getArDadosUsuario('StNome');
            }
            return !$this->Chamado->isInternalCalled() ? $this->Cliente->getCustomerName() : $this->Cliente->getArDadosUsuario('StNome');
        }
        return 'Dracosys';
    }

    public function equals(IObject $Object) {

    }

    public function getIDMensagem() {
        return $this->IDMensagem;
    }

    public function setIDMensagem($IDMensagem) {
        $this->IDMensagem = $IDMensagem;
    }

    public function getIDChamado() {
        return $this->IDChamado;
    }

    public function setIDChamado($IDChamado) {
        $this->IDChamado = $IDChamado;
    }

    public function getAcaoChamado() {
        return $this->AcaoChamado;
    }

    public function setAcaoChamado($AcaoChamado) {
        $this->AcaoChamado = $AcaoChamado;
    }

    public function getIDUsuario() {
        return $this->IDUsuario;
    }

    public function setIDUsuario($IDUsuario) {
        $this->IDUsuario = $IDUsuario;
    }

    public function getIDCliente() {
        return $this->IDCliente;
    }

    public function setIDCliente($IDCliente) {
        $this->IDCliente = $IDCliente;
    }

    public function getTxMensagem() {
        return $this->TxMensagem;
    }

    public function setTxMensagem($TxMensagem) {
        $this->TxMensagem = $TxMensagem;
    }

    public function getEnStatus() {
        return $this->EnStatus;
    }

    public function setEnStatus($EnStatus) {
        $this->EnStatus = $EnStatus;
    }

    public function getDtResposta() {
        return $this->DtResposta;
    }

    public function setDtResposta($DtResposta) {
        $this->DtResposta = $DtResposta;
    }

    public function getUsuario() {
        return $this->Usuario;
    }

    public function setUsuario($Usuario) {
        $this->Usuario = $Usuario;
    }

    public function getChamado() {
        return $this->Chamado;
    }

    public function setChamado($Chamado) {
        $this->Chamado = $Chamado;
    }

    public function getCliente() {
        return $this->Cliente;
    }

    public function setCliente($Cliente) {
        $this->Cliente = $Cliente;
    }

}

?>
